feat: add llm-cli-gateway as optional multi-LLM orchestration add-in#866
feat: add llm-cli-gateway as optional multi-LLM orchestration add-in#866mr-k-man wants to merge 1 commit intogarrytan:mainfrom
Conversation
Add llm-cli-gateway integration via the contrib/add-tool/ pattern. When
installed, 6 gstack skills gain a "Multi-LLM Orchestration" section with
contextual MCP tool recommendations for Gemini + Codex parallel reviews,
async job orchestration, and session continuity.
Components:
- contrib/add-tool/llm-gateway/: routing contract, detection, install/uninstall
- scripts/resolvers/llm-gateway.ts: resolver with host-aware CLI filtering
- Preamble detection for llm-cli-gateway binary + per-CLI availability
- {{LLM_GATEWAY_CONTEXT}} in review, investigate, plan-eng-review,
plan-ceo-review, ship, retro templates
- 109 new tests (resolver, schema, integration, preamble)
Complementary to existing CODEX_SECOND_OPINION — does not replace it.
MCP server name: llm-cli-gw (avoids collision with simonw's llm tool).
7a0c475 to
6d3eddd
Compare
|
@garrytan Second PR today with the same pattern as #862. Another external dependency from the same GitHub org wired into all 30+ generated SKILL.md files. 50 files touched, 2097 lines added. Combined with #862 that is 102 files and 5400 lines of additions in a single day, both embedding external MCP servers into every gstack skill. The security and performance concerns from my review on #862 apply here as well. Recommend not merging either PR. Both wire external MCP servers with no content sanitization into an LLM context that has shell access on every user's machine. |
|
Thanks for the review @garagon. Want to clarify how this differs from #862 since the concerns don't apply the same way: Not the same pattern. This PR has zero Actual diff: 20 files, 1502 lines (not 50/2097 — the generated SKILL.md files were removed from the diff in the force-push before your comment). Point-by-point on the #862 concerns:
The resolver output is a conditional markdown block like: No external content is fetched, read, or injected. The MCP tools are called by the agent at runtime through the standard MCP protocol with normal tool-call semantics — same as any other registered MCP server. Happy to discuss further or make changes if there are specific concerns with this approach. |
|
To clarify: "same pattern" refers to the contribution pattern, not the resolver implementation. Two PRs in a single day from the same author wiring two separate dependencies from the same GitHub org across multiple gstack skills. The org was created recently. Reviewed the llm-cli-gateway source code (https://github.com/verivus-oss/llm-cli-gateway). Some observations on what users would be installing:
The supply chain risk here is real. A lot of people use gstack daily and trust what gets merged. That is for @garrytan to decide. Gus |
Summary
contrib/add-tool/patternCODEX_SECOND_OPINION/ADVERSARIAL_STEPpatternsWhat's included
contrib/add-tool/README.md,contrib/add-tool/llm-gateway/*(README, tools.json, detection.sh, install.sh, uninstall.sh)scripts/resolvers/llm-gateway.ts— reads tools.json, emits conditional markdown per skill with host-aware CLI filteringpreamble.ts— detectsllm-cli-gatewaybinary + per-CLI availability (claude, codex, gemini){{LLM_GATEWAY_CONTEXT}}added to review, investigate, plan-eng-review, plan-ceo-review, ship, retroDesign decisions
llm-cli-gw(avoids collision with simonw's llm tool)ctx.host === t.requires_cliprevents self-invocation on any host_asyncvariants; investigate/plan/retro use syncTest plan
bun run gen:skill-docs --host allsucceeds for all 8 hosts/reviewon a real diff, verify Multi-LLM section appears and tools work